/**
 * @description 本地存储帮助类，可设置过期时间(微信小程序版)
 * @type {{set(*, *, *, *): boolean, get(*): (string|*), clear(): void, remove(*): (string|boolean)}}
 * @author 十一
 * @date 2022-11-20 14:28
 */
const storage = {
    /**
     * @description set 储存方法
     * @param key 键
     * @param value 值
     * @param expired 过期时间（以分钟为单位）。不设置过期时间请传 0 或 null 或 undefined
     * @return {boolean} 返回存储成功或者失败；true || false
     * @author 十一
     * @date 2022-11-20 15:28
     */
    set(key, value, expired) {
        try {
            let para = null;
            if (expired == null || expired === undefined || expired === 0) {
                para = {
                    Data: value,
                    Expired: 0
                };
                wx.setStorage({
                    key: key,
                    data: JSON.stringify(para)
                });
                return true;
            } else {
                para = {
                    Data: value,
                    Expired: expired
                };
                wx.setStorage({
                    key: key,
                    data: JSON.stringify(para)
                });
                return true;
            }
        } catch (e) {
            return false;
        }
    },

    /**
     * @description get 获取方法
     * @param key 键
     * @return {string|any} 当键值不存在或已过期时返回相应提示信息，反之则返回键值对数据
     * @author 十一
     * @date 2022-11-20 15:58
     */
    get(key) {
        if (wx.getStorageSync(key)) {
            let data = JSON.parse(wx.getStorageSync(key));
            if (data.Expired === 0) {
                return JSON.parse(data.Data);  // 没有设置过期时间直接返回数据
            } else {
                const expired = parseInt(data.Expired) || Date.now + 1;
                const now = Date.now();
                // 判断数据是否过期
                if (now >= expired) {
                    wx.removeStorageSync(key);  // 过期删除
                    return "该键值已过期：" + key;
                } else {
                    return JSON.parse(data.Data);
                }
            }
        } else {
            return "键值不存在：" + key;
        }
    },

    /**
     * @description remove 移除某个键值
     * @param key
     * @return {string|boolean} 移除成功返回 true，失败返回提示信息
     * @author 十一
     * @date 2022-11-20 16:01
     */
    remove(key) {
        if (wx.getStorageSync(key)) {
            wx.removeStorageSync(key);
            return true;
        } else {
            return "键值不存在：" + key;
        }
    },

    /**
     * @description clear 删除所有键值
     * @author 十一
     * @date 2022-11-20 16:08
     */
    clear() {
        wx.clearStorage()
    }
};

export default storage;
